﻿// 3722. 骑车路线.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <algorithm>


using namespace std;
/*
https://www.acwing.com/problem/content/3725/

Tomislav 最近发现自己的身材完全走样了，她走楼梯都变得很累。

一天早上她起来以后，她决定恢复姣好的身材。

她最喜欢的运动是骑自行车，因此她决定在本地的小山上做一次旅行。

她骑自行车的路线可以描述为 n个数字的数列，每个数字表示每一段路地海拔高度。

Tomislav 最感兴趣的是最长的高度一直上升的子序列，她称这一段路为爬坡，Tomislav 只想考虑这段爬坡的高度差（即开始和最后的数字的差距），
而不是什么路程长度。

一段爬坡路被定义为长度至少为 2的连续的上升数列。

例如，我们考虑如下路线数列 12 3 5 7 10 6 1 11，这里有两个爬坡，第一个爬坡（3 5 7 10）的高度差是 7
，第二个爬坡的高度差是 10（1 11）。

帮助 Tomislav 计算高度差最大的爬坡的高度差。

输入格式
输入包含多组测试数据。

每组数据第一行包含整数 n。

第二行包含 n个整数 p1,p2,…,pn，表示路线数列。

输出格式
每组数据输出一行结果，表示最大高度差。

数据范围
1≤N≤1000
,
1≤pi≤1000
输入样例：
5
1 2 1 4 6
6
10 8 8 6 4 3
输出样例：
5
0

*/

const int N = 1010;
int a[N];


int main()
{
	int n; 
	while (cin >> n) {
		for (int i = 0; i < n; i++) {
			cin >> a[i];
		}
		int l = 0; int r = 0;
		int ans = 0;
		while (l < n && r < n) {
			while (r < n - 1 && a[r] <= a[r + 1]) r++;
			ans = max(ans, a[r] - a[l] );
			l = r + 1; r = l;
		}

		cout << ans << endl;
	}

	return 0;
}

 